#ifndef PARSER_HEADER_FILE
#define PARSER_HEADER_FILE

#include "Absyn.h"

typedef union
{
  int int_;
  char char_;
  double double_;
  char* string_;
  Statement statement_;
  Query query_;
  Specifier specifier_;
  Projection_list projection_list_;
  Projection projection_;
  Reference reference_;
  Column_Reference column_reference_;
  Function_Reference function_reference_;
  Function function_;
  Dot dot_;
  Variable_declaration_list variable_declaration_list_;
  Variable_declaration variable_declaration_;
  Optional_Where_Clause optional_where_clause_;
  Condition condition_;
  Predicate predicate_;
  Comparison_Predicate comparison_predicate_;
  In_Predicate in_predicate_;
  Between_Predicate between_predicate_;
  Like_Predicate like_predicate_;
  Exists_Predicate exists_predicate_;
  Atom_List atom_list_;
  Nested_Query nested_query_;
  Scalar_Exp scalar_exp_;
  Atom atom_;
  Comparison comparison_;
  Optional_Group_By_Clause optional_group_by_clause_;
  Optional_Having_Clause optional_having_clause_;
  Optional_Order_By_Clause optional_order_by_clause_;
  Column_Reference_List column_reference_list_;
  Column_Reference_Ordering_List column_reference_ordering_list_;
  Column_Reference_Ordering column_reference_ordering_;
  Optional_Ordering optional_ordering_;
} YYSTYPE;

#define _ERROR_ 258
#define _SYMB_0 259
#define _SYMB_1 260
#define _SYMB_2 261
#define _SYMB_3 262
#define _SYMB_4 263
#define _SYMB_5 264
#define _SYMB_6 265
#define _SYMB_7 266
#define _SYMB_8 267
#define _SYMB_9 268
#define _SYMB_10 269
#define _SYMB_11 270
#define _SYMB_12 271
#define _SYMB_13 272
#define _SYMB_14 273
#define _SYMB_15 274
#define _SYMB_16 275
#define _SYMB_17 276
#define _SYMB_18 277
#define _SYMB_19 278
#define _SYMB_20 279
#define _SYMB_21 280
#define _SYMB_22 281
#define _SYMB_23 282
#define _SYMB_24 283
#define _SYMB_25 284
#define _SYMB_26 285
#define _SYMB_27 286
#define _SYMB_28 287
#define _SYMB_29 288
#define _SYMB_30 289
#define _SYMB_31 290
#define _SYMB_32 291
#define _SYMB_33 292
#define _SYMB_34 293
#define _SYMB_35 294
#define _SYMB_36 295
#define _SYMB_37 296
#define _SYMB_38 297
#define _SYMB_39 298
#define _SYMB_40 299
#define _SYMB_41 300
#define _SYMB_42 301
#define _SYMB_43 302
#define _SYMB_44 303
#define _SYMB_45 304
#define _SYMB_46 305
#define _SYMB_47 306
#define _SYMB_48 307
#define _STRING_ 308
#define _INTEGER_ 309
#define _DOUBLE_ 310

extern YYSTYPE yylval;
Statement pStatement(FILE *inp);
Query pQuery(FILE *inp);
Specifier pSpecifier(FILE *inp);
Projection_list pProjection_list(FILE *inp);
Projection pProjection(FILE *inp);
Reference pReference(FILE *inp);
Column_Reference pColumn_Reference(FILE *inp);
Function_Reference pFunction_Reference(FILE *inp);
Function pFunction(FILE *inp);
Dot pDot(FILE *inp);
Variable_declaration_list pVariable_declaration_list(FILE *inp);
Variable_declaration pVariable_declaration(FILE *inp);
Optional_Where_Clause pOptional_Where_Clause(FILE *inp);
Condition pCondition(FILE *inp);
Predicate pPredicate(FILE *inp);
Comparison_Predicate pComparison_Predicate(FILE *inp);
In_Predicate pIn_Predicate(FILE *inp);
Between_Predicate pBetween_Predicate(FILE *inp);
Like_Predicate pLike_Predicate(FILE *inp);
Exists_Predicate pExists_Predicate(FILE *inp);
Atom_List pAtom_List(FILE *inp);
Nested_Query pNested_Query(FILE *inp);
Scalar_Exp pScalar_Exp(FILE *inp);
Atom pAtom(FILE *inp);
Comparison pComparison(FILE *inp);
Optional_Group_By_Clause pOptional_Group_By_Clause(FILE *inp);
Optional_Having_Clause pOptional_Having_Clause(FILE *inp);
Optional_Order_By_Clause pOptional_Order_By_Clause(FILE *inp);
Column_Reference_List pColumn_Reference_List(FILE *inp);
Column_Reference_Ordering_List pColumn_Reference_Ordering_List(FILE *inp);
Column_Reference_Ordering pColumn_Reference_Ordering(FILE *inp);
Optional_Ordering pOptional_Ordering(FILE *inp);


#endif
